今日將介紹4種 Introspection()函數:
1. map-get($map,$key) 函數
2. map-has-key($map,$key)函數
3. map-keys($map)函數
4. map-values($map)函數
$map:定義好的map。
$key:需要遍歷的key。
根據 $key 參數,返回 $key 在 $map 中對應的 value 值。如果 $key 不存在 $map 中,將返回 null 值。
例如:
// scss //
$map-colors: (
RED: #ff1500,
ORANGE: #ff7b00,
YELLOW: #fcda01,
GREEN: #00ff2a,
BLUE: #008cf8
);
.btn-dribble{
font-size: 100px;
color: map-get($map-colors,YELLOW);
}
編|
譯| 此時的 $key 鍵值 YELLOW 對應的值為 #fcda01。
後|
V
// css //
.btn-dribble {
font-size: 100px;
color: #fcda01;
}
例如:
// scss //
$map-colors: (
RED: #ff1500,
ORANGE: #ff7b00,
YELLOW: #fcda01,
GREEN: #00ff2a,
BLUE: #008cf8
);
.btn-dribble{
font-size: 100px;
color: map-get($map-colors,PINK);
}
編|
譯| 此時的 $key 鍵值 PINK 在 $map 裡無對應的值,則返回NULL。
後| !須注意在命令終端編譯時,此時並不會出現任何錯誤或警告信息。!
V
// css //
.btn-dribble {
font-size: 100px;
}
將返回一個布爾值。
當 $map 中有這個 $key,則函數返回true,否則返回false。
例如:
// scss //
$map-colors: (
RED: #ff1500,
ORANGE: #ff7b00,
YELLOW: #fcda01,
GREEN: #00ff2a,
BLUE: #008cf8
);
@if map-has-key($map-colors,PINK){
.btn-dribble{
font-size: 100px;
color: map-get($map-colors,PINK);
}
}@else {
@warn "No color found for PINK in $map-colors map. Property ommitted."
}
編| 在此程式碼中找不到 $key 鍵值 PINK,則可以選擇使用map-has-key($map,$key)
譯| 函數就可以出現提示訊息。
後|
V
Warning:
No color found for PINK in $social-colors map. Property ommitted.
例如:
// scss //
$map-colors: (
RED: #ff1500,
ORANGE: #ff7b00,
YELLOW: #fcda01,
GREEN: #00ff2a,
BLUE: #008cf8
);
@function colors($color){
@if not map-has-key($map-colors,$color){
@warn "No color found for `#{$color}` in $social-colors map. Property omitted.";
}
@return map-get($map-colors,$color);
}
.btn-RED {
color: colors(RED);
}
.btn-ORANGE {
color: colors(ORANGE);
}
.btn-YELLOW {
color: colors(YELLOW);
}
.btn-GREEN {
color: colors(GREEN);
}.btn-BLUE {
color: colors(BLUE);
}
// .btn-RED 以下皆可用@each代替 //
// @each $social-network,$social-color in $map-colors {
.btn-#{$social-network} {
color: colors($social-network);
}
} //
編|
譯|
後|
V
// css //
.btn-RED {
color: #ff1500;
}
.btn-ORANGE {
color: #ff7b00;
}
.btn-YELLOW {
color: #fcda01;
}
.btn-GREEN {
color: #00ff2a;
}
.btn-BLUE {
color: #008cf8;
}
返回 $map 中的所有 $key,輸出結果爲一個列表。
例如:
// scss //
$map-colors: (
RED: #ff1500,
ORANGE: #ff7b00,
YELLOW: #fcda01,
GREEN: #00ff2a,
BLUE: #008cf8
);
@function colors($color){
$names: map-keys($map-colors);
@if not index($names,$color){
@warn "Waring: `#{$color} is not a valid color name.`";
}
@return map-get($map-colors,$color);
}
@each $social-network,$social-color in $map-colors {
.btn-#{$social-network} {
color: colors($social-network);
}
}
// @function 以下皆可用@each及@for代替 //
// @each $name in map-keys($map-colors){
.btn-#{$name}{
color: colors($name);
}
}
@for $i from 1 through length(map-keys($map-colors)){
.btn-#{nth(map-keys($map-colors),$i)} {
color: colors(nth(map-keys($map-colors),$i));
}
} //
編|
譯|
後|
V
// css //
.btn-RED {
color: #ff1500;
}
.btn-ORANGE {
color: #ff7b00;
}
.btn-YELLOW {
color: #fcda01;
}
.btn-GREEN {
color: #00ff2a;
}
.btn-BLUE {
color: #008cf8;
}
返回 $map 中的所有 $value,輸出結果爲一個列表。